#include <stdio.h>
#include <stdlib.h>
#include "numero.h"

Numero *root = NULL;

void numero_add_rec(Numero *branch, Numero *node);

void numero_add(int val)
{
  Numero *n = malloc(sizeof(Numero));
  *n = (Numero){
      .value = val,
      .left = NULL,
      .right = NULL,
    };
  if(!root)
    root = n;
  else
    numero_add_rec(root, n);
}

void numero_add_rec(Numero *branch, Numero *node)
{
  if(node->value > branch->value)
    {
      if(!branch->right)
	branch->right = node;
      else
	numero_add_rec(branch->right, node);
    }
  else
    {
      if(!branch->left)
	branch->left = node;
      else
	numero_add_rec(branch->left, node);
    }
}

void numero_list_in_order_rec(Numero *n, int depth)
{
	if(!n)
		return;
	if(n->left)
		numero_list_in_order_rec(n->left, depth + 1);
	for(int i = 0; i < depth; ++i)
		printf("  ");
	printf("%d\n", n->value);
	if(n->right)
		numero_list_in_order_rec(n->right, depth + 1);
}

void numero_list_in_order()
{
  numero_list_in_order_rec(root, 0);
}

void numero_free(Numero *root);
